#ifndef P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
#define P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_

#include "p2p/transportdescription.h"

namespace base {
	class SSLIdentity;
}

namespace cricket {

	struct TransportOptions {
		TransportOptions() : ice_restart(false) {}
		bool ice_restart;
	};

	// Creates transport descriptions according to the supplied configuration.
	// When creating answers, performs the appropriate negotiation
	// of the various fields to determine the proper result.
	class TransportDescriptionFactory {
	public:
		// Default ctor; use methods below to set configuration.
		TransportDescriptionFactory();
		SecurePolicy secure() const { return secure_; }
		// The identity to use when setting up DTLS.
		base::SSLIdentity* identity() const { return identity_; }

		// Specifies the transport protocol to be use.
		void set_protocol(TransportProtocol protocol) { protocol_ = protocol; }
		// Specifies the transport security policy to use.
		void set_secure(SecurePolicy s) { secure_ = s; }
		// Specifies the identity to use (only used when secure is not SEC_DISABLED).
		void set_identity(base::SSLIdentity* identity) { identity_ = identity; }
		// Specifies the algorithm to use when creating an identity digest.
		void set_digest_algorithm(const std::string& alg) { digest_alg_ = alg; }

		// Creates a transport description suitable for use in an offer.
		TransportDescription* CreateOffer(const TransportOptions& options,
			const TransportDescription* current_description) const;
		// Create a transport description that is a response to an offer.
		TransportDescription* CreateAnswer(
			const TransportDescription* offer,
			const TransportOptions& options,
			const TransportDescription* current_description) const;

	private:
		bool CreateIdentityDigest(TransportDescription* description) const;

		TransportProtocol protocol_;
		SecurePolicy secure_;
		base::SSLIdentity* identity_;
		std::string digest_alg_;
	};

}  // namespace cricket

#endif  // P2P_BASE_TRANSPORTDESCRIPTIONFACTORY_H_
